#include "Delta.h"
#include "Gamma.h"
#include "RepresentadorEnBits.h"
#include "math.h"

Delta::Delta() {
}

Delta::~Delta() {
}


std::string Delta::comprimir(int x) {
	RepresentadorEnBits r;
	Gamma gama;
	std::string cadena;
	int longitud = 0;
	int log = (int) (log2(x));
	int delta = 1 +log;
	cadena = gama.comprimir(delta , &longitud);
	int binario= x - (pow(2,log));
	r.set_long(log);
	r.agregar_nro_dec(log, binario);
	std::string cadenita;
	r.pasar_a_bit(&cadenita);
	int a = cadena.size();
	int c = cadenita.size();
	cadena.append(cadenita);
	return cadena;
}


int Delta::descomprimir(const std::string &cadena, int* pos_actual) {
	Gamma gama;
	int valor = gama.descomprimir(cadena, pos_actual);
	int auxiliar = valor-1;
	int i = 0;
	RepresentadorEnBits r;
	r.set_long(auxiliar);
	while ( i < auxiliar ) {
		if (cadena.at((*pos_actual)) == '1') {
			r.agregar_uno();
		}
		else {
			r.agregar_cero();
		}
		i++;
		(*pos_actual)++;
	}
	int res = r.devolver_entero();
	int x = pow (2, (valor-1)) + res;
	return x;
}
